<?php

interface DBConnection
{
    public function connect();
}

class MySQLConnection implements DBConnection
{
    public function connect()
    {
        return "Connected to MySQL";
    }
}

class PostgreSQLConnection implements DBConnection
{
    public function connect()
    {
        return "Connected to PostgreSQL";
    }
}

class DBConnectionFactory
{
    public function createConnection($dbType)
    {
        switch ($dbType) {
            case'mysql':
                return new MySQLConnection();
            case 'postgresql':
                return new PostgreSQLConnection();
            default:
                throw new Exception("Invalid database type");
        }
    }
}

$factory = new DBConnectionFactory();

$mysqlConn = $factory->createConnection('mysql');
echo $mysqlConn->connect();

$pgConn = $factory->createConnection('postgresql');
echo $pgConn->connect();

/*

工厂模式的优点包括：
解耦了产品的创建和使用，客户端不需要知道产品的具体创建细节。
方便扩展产品类，只需要在工厂类中添加相应的创建逻辑。
有利于代码的维护和管理，提高了代码的可复用性和灵活性。
具体用处：创建不用的数据库对象，和不同的产品类型；

 */